package com.doit.day01;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Scanner;

/**
 * 需求：使用redis模拟手机验证码发送，验证码有效期60s，
 * 验证验证码输入不能超过3次，
 * 超过3次今天就没机会了
 * <p>
 * 1.要让他生成一个手机验证码  ==》 存到redis里面去 并且给他设置一个过期时间  为60s
 * <p>
 * key,value   ==> key    手机号作为key
 * ==> value  验证码作为value
 * <p>
 * 2.自己输入验证码  ==》 拿着自己输入的验证码和redis中的验证码进行比较   看是否一致
 */

/*
//验证手机号
/**
 * 判断字符串是否符合手机号码格式
 * 移动号段:   134 135 136 137 138 139 147 148 150 151 152 157 158 159  165 172 178 182 183 184 187 188 198
 * 联通号段:   130 131 132 145 146 155 156 166 170 171 175 176 185 186
 * 电信号段:   133 149 153 170 173 174 177 180 181 189  191  199
 * 虚拟运营商: 170
// "[1]"代表下一位为数字可以是几，"[0-9]"代表可以为0-9中的一个，"[5,7,9]"表示可以是5,7,9中的任意一位,
[^4]表示除4以外的任何一个,\\d{8}"代表后面是可以是0～9的数字，有8位。
String regex = "^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
 */


public class PhoneDemo {
    public static void main(String[] args) throws InterruptedException {
        //redis对象
        Jedis jedis = new Jedis("linux01", 6379);

        String phone = "13378888000";

        String code = getCode(phone);

        System.out.println("你的验证码是："+code);

        //将手机号和验证码存储到redis里面去
        jedis.setex(phone, 10, code);

        System.out.println("请输入你的验证码：");
        Scanner sc = new Scanner(System.in);
        String myCode = "";

        int count = 1;
        while (count<=3){
            myCode = sc.nextLine();
            //拿着我输入的验证码和redis里面存储的验证码进行比较
            String redisCode = jedis.get(phone);
            if (myCode.equals(redisCode)) {
                //代表输入的验证码是正确的
                System.out.println("输入正确，没奖励！");
                break;
            } else {
                //请重新输入
                if (count == 3){
                    break;
                }
                System.out.println("验证码有误，请重新输入：");
                count++;
            }
        }




    }


    public static String getCode(String phone) {
        //判断一下手机号是否符合要求  ==》 正则匹配的方式
        String regex = "^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
        boolean matches = phone.matches(regex);
        if (matches){
            StringBuilder sb = new StringBuilder();
            //生成手机验证码
            Random random = new Random();

            for (int i = 0; i < 6; i++) {
                //只可能生成一个从0到9的整数
                int num = random.nextInt(10);
                //让他生成6次，然后将每次生成的数字做一个拼接
                sb.append(num);
            }
            return sb.toString();
        }else {
            System.out.println("手机号不正确！");
            return "";
        }

    }
}



